# vim: et ts=4 sts=4 sw=4 tw=0

# 创建一个名为 jsoncpp_test 的可执行文件目标
# 源文件包括 jsontest.cpp、jsontest.h、fuzz.cpp、fuzz.h 和 main.cpp
add_executable(jsoncpp_test
    jsontest.cpp
    jsontest.h
    fuzz.cpp
    fuzz.h
    main.cpp
)

# 检查是否启用了构建共享库的选项
if(BUILD_SHARED_LIBS)
    # 检查 CMake 版本是否大于等于 3.12.0
    if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0)
        # CMake 3.12.0 及以上版本使用新语法定义宏 JSON_DLL
        add_compile_definitions( JSON_DLL )
    else()
        # 旧版本 CMake 使用旧语法定义宏 JSON_DLL
        add_definitions( -DJSON_DLL )
    endif()
    # 将 jsoncpp_test 可执行文件与共享库 jsoncpp_lib 链接
    target_link_libraries(jsoncpp_test jsoncpp_lib)
else()
    # 将 jsoncpp_test 可执行文件与静态库 jsoncpp_static 链接
    target_link_libraries(jsoncpp_test jsoncpp_static)
endif()

# 另一种解决 issue #90 的方法
# 为 jsoncpp_test 目标设置编译标志 -ffloat-store，该标志可确保浮点数运算结果存储在内存中
#set_target_properties(jsoncpp_test PROPERTIES COMPILE_FLAGS -ffloat-store)

## 创建用于仪表盘提交的测试，方便在 CI 结果中查看，例如 https://my.cdash.org/index.php?project=jsoncpp
# 创建一个名为 jsoncpp_test 的测试
add_test(NAME jsoncpp_test
    # 测试命令为使用交叉编译模拟器（若有）运行 jsoncpp_test 可执行文件
    COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:jsoncpp_test>
)
# 设置 jsoncpp_test 目标的输出文件名为 jsoncpp_test
set_target_properties(jsoncpp_test PROPERTIES OUTPUT_NAME jsoncpp_test)

# 在构建后运行单元测试
# （默认的 CMake 工作流程会将测试结果隐藏在文件中，导致开发体验不佳）
if(JSONCPP_WITH_POST_BUILD_UNITTEST)
    # 为 jsoncpp_test 目标添加一个构建后命令
    add_custom_command(TARGET jsoncpp_test
        POST_BUILD
        # 构建后执行的命令为使用交叉编译模拟器（若有）运行 jsoncpp_test 可执行文件
        COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:jsoncpp_test>
    )
endif()
